{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8fe19b15",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import matplotlib.pyplot as plt\n",
    "from pandas import read_csv\n",
    "import math\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from pandas import concat\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d273afaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pandas import read_csv\n",
    "from datetime import datetime\n",
    "# load data\n",
    "dataset = read_csv('pu03_max.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8f931387",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    ����ʱ��  �й��������ֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/1/1          6179.9364   1     1        1          1        1     1   \n",
      "1  2019/1/2         10711.9704   1     2        2          1        2     1   \n",
      "2  2019/1/3         10079.0262   1     3        3          1        3     1   \n",
      "3  2019/1/4          9713.3055   1     4        4          1        4     1   \n",
      "4  2019/1/5          6958.3842   1     5        5          1        5     1   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       1       0      1      0         0      3.0    12.0       7.0   \n",
      "1       0       0      0      0         0      5.0    11.0       6.0   \n",
      "2       0       0      0      0         0      2.0    15.0       9.0   \n",
      "3       0       0      0      0         0      3.0    17.0      12.0   \n",
      "4       0       0      0      0         1      3.0    17.0      12.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2543c3f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# manually specify column names\n",
    "#dataset.drop('Unnamed: 0 ', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "82c5bfba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    ����ʱ��  �й��������ֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/1/1          6179.9364   1     1        1          1        1     1   \n",
      "1  2019/1/2         10711.9704   1     2        2          1        2     1   \n",
      "2  2019/1/3         10079.0262   1     3        3          1        3     1   \n",
      "3  2019/1/4          9713.3055   1     4        4          1        4     1   \n",
      "4  2019/1/5          6958.3842   1     5        5          1        5     1   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       1       0      1      0         0      3.0    12.0       7.0   \n",
      "1       0       0      0      0         0      5.0    11.0       6.0   \n",
      "2       0       0      0      0         0      2.0    15.0       9.0   \n",
      "3       0       0      0      0         0      3.0    17.0      12.0   \n",
      "4       0       0      0      0         1      3.0    17.0      12.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b9af4d79",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.columns = ['数据时间','有功功率最大值（kw）','月','天','一年第几天','一年第几周','weekday','季节','是否月初','是否月末','是否季节初','是否季节末','是否周末','天气状况','最高温度','最低温度','白天风力风向','夜晚风力风向']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7424ebc2",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.drop('数据时间', axis=1, inplace=True)\n",
    "# summarize first 5 rows\n",
    "#print(dataset.head(5))\n",
    "# save to file\n",
    "dataset.to_csv('power.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3a01e663",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      有功功率最大值（kw）   月   天  一年第几天  一年第几周  weekday  季节  是否月初  是否月末  是否季节初  \\\n",
      "0       6179.9364   1   1      1      1        1   1     1     0      1   \n",
      "1      10711.9704   1   2      2      1        2   1     0     0      0   \n",
      "2      10079.0262   1   3      3      1        3   1     0     0      0   \n",
      "3       9713.3055   1   4      4      1        4   1     0     0      0   \n",
      "4       6958.3842   1   5      5      1        5   1     0     0      0   \n",
      "...           ...  ..  ..    ...    ...      ...  ..   ...   ...    ...   \n",
      "1060          NaN  11  26    330     47        4   4     0     0      0   \n",
      "1061          NaN  11  27    331     47        5   4     0     0      0   \n",
      "1062          NaN  11  28    332     47        6   4     0     0      0   \n",
      "1063          NaN  11  29    333     48        0   4     0     0      0   \n",
      "1064          NaN  11  30    334     48        1   4     0     1      0   \n",
      "\n",
      "      是否季节末  是否周末  天气状况   最高温度   最低温度  白天风力风向  夜晚风力风向  \n",
      "0         0     0  3.00  12.00   7.00   11.00    8.00  \n",
      "1         0     0  5.00  11.00   6.00   11.00    8.00  \n",
      "2         0     0  2.00  15.00   9.00   11.00    8.00  \n",
      "3         0     0  3.00  17.00  12.00   11.00    8.00  \n",
      "4         0     1  3.00  17.00  12.00   11.00    8.00  \n",
      "...     ...   ...   ...    ...    ...     ...     ...  \n",
      "1060      0     0  2.00  25.80  16.35   15.20   12.20  \n",
      "1061      0     1  2.00  23.65  15.30   19.40   16.40  \n",
      "1062      0     1  1.15  21.40  13.50   21.15   18.15  \n",
      "1063      0     0  1.85  22.05  13.65   15.20   12.20  \n",
      "1064      0     0  1.15  22.50  14.20   20.40   17.40  \n",
      "\n",
      "[1065 rows x 17 columns]\n"
     ]
    }
   ],
   "source": [
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4c4e13a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<bound method NDFrame.head of      var1(t-1)  var2(t-1)  var3(t-1)  var4(t-1)  var5(t-1)  var6(t-1)  \\\n",
      "1     0.369907   0.000000   0.000000   0.000000   0.000000   0.166667   \n",
      "2     0.654542   0.000000   0.033333   0.002740   0.000000   0.333333   \n",
      "3     0.614790   0.000000   0.066667   0.005479   0.000000   0.500000   \n",
      "4     0.591821   0.000000   0.100000   0.008219   0.000000   0.666667   \n",
      "5     0.418798   0.000000   0.133333   0.010959   0.000000   0.833333   \n",
      "..         ...        ...        ...        ...        ...        ...   \n",
      "969   0.630265   0.636364   0.833333   0.649315   0.634615   0.500000   \n",
      "970   0.630725   0.636364   0.866667   0.652055   0.634615   0.666667   \n",
      "971   0.379795   0.636364   0.900000   0.654795   0.634615   0.833333   \n",
      "972   0.390625   0.636364   0.933333   0.657534   0.634615   1.000000   \n",
      "973   0.647945   0.636364   0.966667   0.660274   0.653846   0.000000   \n",
      "\n",
      "     var7(t-1)  var8(t-1)  var9(t-1)  var10(t-1)  var11(t-1)  var12(t-1)  \\\n",
      "1     0.000000        1.0        0.0         1.0         0.0         0.0   \n",
      "2     0.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "3     0.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "4     0.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "5     0.000000        0.0        0.0         0.0         0.0         1.0   \n",
      "..         ...        ...        ...         ...         ...         ...   \n",
      "969   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "970   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "971   0.666667        0.0        0.0         0.0         0.0         1.0   \n",
      "972   0.666667        0.0        0.0         0.0         0.0         1.0   \n",
      "973   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "\n",
      "     var13(t-1)  var14(t-1)  var15(t-1)  var16(t-1)  var17(t-1)   var1(t)  \n",
      "1         0.250    0.071429    0.153846       0.000       0.000  0.654542  \n",
      "2         0.500    0.035714    0.115385       0.000       0.000  0.614790  \n",
      "3         0.125    0.178571    0.230769       0.000       0.000  0.591821  \n",
      "4         0.250    0.250000    0.346154       0.000       0.000  0.418798  \n",
      "5         0.250    0.250000    0.346154       0.000       0.000  0.379203  \n",
      "..          ...         ...         ...         ...         ...       ...  \n",
      "969       1.000    0.892857    0.923077       0.875       0.875  0.630725  \n",
      "970       1.000    0.892857    0.884615       0.875       0.875  0.379795  \n",
      "971       0.125    0.821429    0.884615       0.875       0.875  0.390625  \n",
      "972       1.000    0.785714    0.846154       0.875       0.875  0.647945  \n",
      "973       1.000    0.857143    0.884615       0.875       0.875  0.630525  \n",
      "\n",
      "[973 rows x 18 columns]>\n"
     ]
    }
   ],
   "source": [
    "# prepare data for lstm\n",
    "from pandas import DataFrame\n",
    "from pandas import concat\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "# convert series to supervised learning\n",
    "def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):\n",
    "    n_vars = 1 if type(data) is list else data.shape[1]\n",
    "    df = DataFrame(data)\n",
    "    cols, names = list(), list()\n",
    "    # input sequence (t-n, ... t-1)\n",
    "    for i in range(n_in, 0, -1):\n",
    "        cols.append(df.shift(i))\n",
    "        names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # forecast sequence (t, t+1, ... t+n)\n",
    "    for i in range(0, n_out):\n",
    "        cols.append(df.shift(-i))\n",
    "        if i == 0:\n",
    "            names += [('var%d(t)' % (j+1)) for j in range(n_vars)]\n",
    "        else:\n",
    "            names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # put it all together\n",
    "    agg = concat(cols, axis=1)\n",
    "    agg.columns = names\n",
    "    # drop rows with NaN values\n",
    "    if dropnan:\n",
    "        agg.dropna(inplace=True)\n",
    "    return agg\n",
    "\n",
    "# load dataset\n",
    "dataset = read_csv('power.csv', header=0, index_col=0)\n",
    "values = dataset.values\n",
    "# integer encode direction\n",
    "encoder = LabelEncoder()\n",
    "values[:,4] = encoder.fit_transform(values[:,4])\n",
    "# ensure all data is float\n",
    "values = values.astype('float32')\n",
    "# normalize features\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "scaled = scaler.fit_transform(values)\n",
    "# frame as supervised learning\n",
    "reframed = series_to_supervised(scaled, 1, 1)\n",
    "# drop columns we don't want to predict\n",
    "reframed.drop(reframed.columns[[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]], axis=1, inplace=True)\n",
    "#print(reframed.head())\n",
    "print(reframed.head)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "31d34811",
   "metadata": {},
   "outputs": [],
   "source": [
    "#plt.plot(reframed)\n",
    "#plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b8a051ee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(882, 1, 17) (882,) (91, 1, 17) (91,)\n"
     ]
    }
   ],
   "source": [
    "...\n",
    "# split into train and test sets\n",
    "values = reframed.values\n",
    "n_train_hours = int(len(reframed)-91)\n",
    "train = values[:n_train_hours, :]\n",
    "test = values[n_train_hours:, :]\n",
    "# split into input and outputs\n",
    "train_X, train_y = train[:, :-1], train[:, -1]\n",
    "test_X, test_y = test[:, :-1], test[:, -1]\n",
    "# reshape input to be 3D [samples, timesteps, features]\n",
    "train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))\n",
    "test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))\n",
    "print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f1dfb13d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "13/13 - 1s - loss: 0.4119 - val_loss: 0.3082 - 1s/epoch - 96ms/step\n",
      "Epoch 2/100\n",
      "13/13 - 0s - loss: 0.2430 - val_loss: 0.1446 - 28ms/epoch - 2ms/step\n",
      "Epoch 3/100\n",
      "13/13 - 0s - loss: 0.1780 - val_loss: 0.1343 - 28ms/epoch - 2ms/step\n",
      "Epoch 4/100\n",
      "13/13 - 0s - loss: 0.1582 - val_loss: 0.1279 - 28ms/epoch - 2ms/step\n",
      "Epoch 5/100\n",
      "13/13 - 0s - loss: 0.1436 - val_loss: 0.1170 - 28ms/epoch - 2ms/step\n",
      "Epoch 6/100\n",
      "13/13 - 0s - loss: 0.1357 - val_loss: 0.1162 - 28ms/epoch - 2ms/step\n",
      "Epoch 7/100\n",
      "13/13 - 0s - loss: 0.1298 - val_loss: 0.1143 - 27ms/epoch - 2ms/step\n",
      "Epoch 8/100\n",
      "13/13 - 0s - loss: 0.1237 - val_loss: 0.1125 - 27ms/epoch - 2ms/step\n",
      "Epoch 9/100\n",
      "13/13 - 0s - loss: 0.1180 - val_loss: 0.1112 - 27ms/epoch - 2ms/step\n",
      "Epoch 10/100\n",
      "13/13 - 0s - loss: 0.1131 - val_loss: 0.1108 - 27ms/epoch - 2ms/step\n",
      "Epoch 11/100\n",
      "13/13 - 0s - loss: 0.1099 - val_loss: 0.1103 - 27ms/epoch - 2ms/step\n",
      "Epoch 12/100\n",
      "13/13 - 0s - loss: 0.1074 - val_loss: 0.1101 - 27ms/epoch - 2ms/step\n",
      "Epoch 13/100\n",
      "13/13 - 0s - loss: 0.1049 - val_loss: 0.1097 - 27ms/epoch - 2ms/step\n",
      "Epoch 14/100\n",
      "13/13 - 0s - loss: 0.1039 - val_loss: 0.1089 - 27ms/epoch - 2ms/step\n",
      "Epoch 15/100\n",
      "13/13 - 0s - loss: 0.1018 - val_loss: 0.1080 - 27ms/epoch - 2ms/step\n",
      "Epoch 16/100\n",
      "13/13 - 0s - loss: 0.1010 - val_loss: 0.1074 - 26ms/epoch - 2ms/step\n",
      "Epoch 17/100\n",
      "13/13 - 0s - loss: 0.0992 - val_loss: 0.1066 - 27ms/epoch - 2ms/step\n",
      "Epoch 18/100\n",
      "13/13 - 0s - loss: 0.0982 - val_loss: 0.1058 - 26ms/epoch - 2ms/step\n",
      "Epoch 19/100\n",
      "13/13 - 0s - loss: 0.0969 - val_loss: 0.1047 - 28ms/epoch - 2ms/step\n",
      "Epoch 20/100\n",
      "13/13 - 0s - loss: 0.0957 - val_loss: 0.1037 - 29ms/epoch - 2ms/step\n",
      "Epoch 21/100\n",
      "13/13 - 0s - loss: 0.0945 - val_loss: 0.1027 - 28ms/epoch - 2ms/step\n",
      "Epoch 22/100\n",
      "13/13 - 0s - loss: 0.0933 - val_loss: 0.1015 - 28ms/epoch - 2ms/step\n",
      "Epoch 23/100\n",
      "13/13 - 0s - loss: 0.0926 - val_loss: 0.1007 - 28ms/epoch - 2ms/step\n",
      "Epoch 24/100\n",
      "13/13 - 0s - loss: 0.0912 - val_loss: 0.0999 - 28ms/epoch - 2ms/step\n",
      "Epoch 25/100\n",
      "13/13 - 0s - loss: 0.0905 - val_loss: 0.0989 - 28ms/epoch - 2ms/step\n",
      "Epoch 26/100\n",
      "13/13 - 0s - loss: 0.0888 - val_loss: 0.0977 - 28ms/epoch - 2ms/step\n",
      "Epoch 27/100\n",
      "13/13 - 0s - loss: 0.0887 - val_loss: 0.0969 - 28ms/epoch - 2ms/step\n",
      "Epoch 28/100\n",
      "13/13 - 0s - loss: 0.0868 - val_loss: 0.0961 - 28ms/epoch - 2ms/step\n",
      "Epoch 29/100\n",
      "13/13 - 0s - loss: 0.0863 - val_loss: 0.0942 - 28ms/epoch - 2ms/step\n",
      "Epoch 30/100\n",
      "13/13 - 0s - loss: 0.0849 - val_loss: 0.0953 - 33ms/epoch - 3ms/step\n",
      "Epoch 31/100\n",
      "13/13 - 0s - loss: 0.0839 - val_loss: 0.0917 - 27ms/epoch - 2ms/step\n",
      "Epoch 32/100\n",
      "13/13 - 0s - loss: 0.0833 - val_loss: 0.0920 - 28ms/epoch - 2ms/step\n",
      "Epoch 33/100\n",
      "13/13 - 0s - loss: 0.0818 - val_loss: 0.0907 - 28ms/epoch - 2ms/step\n",
      "Epoch 34/100\n",
      "13/13 - 0s - loss: 0.0809 - val_loss: 0.0895 - 28ms/epoch - 2ms/step\n",
      "Epoch 35/100\n",
      "13/13 - 0s - loss: 0.0801 - val_loss: 0.0897 - 28ms/epoch - 2ms/step\n",
      "Epoch 36/100\n",
      "13/13 - 0s - loss: 0.0790 - val_loss: 0.0880 - 28ms/epoch - 2ms/step\n",
      "Epoch 37/100\n",
      "13/13 - 0s - loss: 0.0786 - val_loss: 0.0874 - 28ms/epoch - 2ms/step\n",
      "Epoch 38/100\n",
      "13/13 - 0s - loss: 0.0781 - val_loss: 0.0879 - 28ms/epoch - 2ms/step\n",
      "Epoch 39/100\n",
      "13/13 - 0s - loss: 0.0766 - val_loss: 0.0876 - 35ms/epoch - 3ms/step\n",
      "Epoch 40/100\n",
      "13/13 - 0s - loss: 0.0760 - val_loss: 0.0860 - 31ms/epoch - 2ms/step\n",
      "Epoch 41/100\n",
      "13/13 - 0s - loss: 0.0764 - val_loss: 0.0859 - 31ms/epoch - 2ms/step\n",
      "Epoch 42/100\n",
      "13/13 - 0s - loss: 0.0754 - val_loss: 0.0874 - 28ms/epoch - 2ms/step\n",
      "Epoch 43/100\n",
      "13/13 - 0s - loss: 0.0740 - val_loss: 0.0853 - 28ms/epoch - 2ms/step\n",
      "Epoch 44/100\n",
      "13/13 - 0s - loss: 0.0751 - val_loss: 0.0850 - 28ms/epoch - 2ms/step\n",
      "Epoch 45/100\n",
      "13/13 - 0s - loss: 0.0768 - val_loss: 0.0852 - 35ms/epoch - 3ms/step\n",
      "Epoch 46/100\n",
      "13/13 - 0s - loss: 0.0733 - val_loss: 0.0872 - 28ms/epoch - 2ms/step\n",
      "Epoch 47/100\n",
      "13/13 - 0s - loss: 0.0730 - val_loss: 0.0842 - 28ms/epoch - 2ms/step\n",
      "Epoch 48/100\n",
      "13/13 - 0s - loss: 0.0793 - val_loss: 0.0847 - 28ms/epoch - 2ms/step\n",
      "Epoch 49/100\n",
      "13/13 - 0s - loss: 0.0762 - val_loss: 0.0910 - 33ms/epoch - 3ms/step\n",
      "Epoch 50/100\n",
      "13/13 - 0s - loss: 0.0783 - val_loss: 0.0843 - 27ms/epoch - 2ms/step\n",
      "Epoch 51/100\n",
      "13/13 - 0s - loss: 0.0804 - val_loss: 0.0837 - 28ms/epoch - 2ms/step\n",
      "Epoch 52/100\n",
      "13/13 - 0s - loss: 0.0823 - val_loss: 0.0919 - 28ms/epoch - 2ms/step\n",
      "Epoch 53/100\n",
      "13/13 - 0s - loss: 0.0768 - val_loss: 0.0860 - 28ms/epoch - 2ms/step\n",
      "Epoch 54/100\n",
      "13/13 - 0s - loss: 0.0737 - val_loss: 0.0851 - 30ms/epoch - 2ms/step\n",
      "Epoch 55/100\n",
      "13/13 - 0s - loss: 0.0767 - val_loss: 0.0890 - 26ms/epoch - 2ms/step\n",
      "Epoch 56/100\n",
      "13/13 - 0s - loss: 0.0721 - val_loss: 0.0833 - 27ms/epoch - 2ms/step\n",
      "Epoch 57/100\n",
      "13/13 - 0s - loss: 0.0714 - val_loss: 0.0848 - 31ms/epoch - 2ms/step\n",
      "Epoch 58/100\n",
      "13/13 - 0s - loss: 0.0754 - val_loss: 0.0875 - 28ms/epoch - 2ms/step\n",
      "Epoch 59/100\n",
      "13/13 - 0s - loss: 0.0717 - val_loss: 0.0829 - 27ms/epoch - 2ms/step\n",
      "Epoch 60/100\n",
      "13/13 - 0s - loss: 0.0708 - val_loss: 0.0841 - 27ms/epoch - 2ms/step\n",
      "Epoch 61/100\n",
      "13/13 - 0s - loss: 0.0748 - val_loss: 0.0853 - 29ms/epoch - 2ms/step\n",
      "Epoch 62/100\n",
      "13/13 - 0s - loss: 0.0705 - val_loss: 0.0833 - 28ms/epoch - 2ms/step\n",
      "Epoch 63/100\n",
      "13/13 - 0s - loss: 0.0700 - val_loss: 0.0832 - 28ms/epoch - 2ms/step\n",
      "Epoch 64/100\n",
      "13/13 - 0s - loss: 0.0729 - val_loss: 0.0827 - 27ms/epoch - 2ms/step\n",
      "Epoch 65/100\n",
      "13/13 - 0s - loss: 0.0703 - val_loss: 0.0865 - 27ms/epoch - 2ms/step\n",
      "Epoch 66/100\n",
      "13/13 - 0s - loss: 0.0722 - val_loss: 0.0828 - 27ms/epoch - 2ms/step\n",
      "Epoch 67/100\n",
      "13/13 - 0s - loss: 0.0733 - val_loss: 0.0856 - 27ms/epoch - 2ms/step\n",
      "Epoch 68/100\n",
      "13/13 - 0s - loss: 0.0784 - val_loss: 0.0900 - 27ms/epoch - 2ms/step\n",
      "Epoch 69/100\n",
      "13/13 - 0s - loss: 0.0739 - val_loss: 0.0864 - 28ms/epoch - 2ms/step\n",
      "Epoch 70/100\n",
      "13/13 - 0s - loss: 0.0707 - val_loss: 0.0844 - 30ms/epoch - 2ms/step\n",
      "Epoch 71/100\n",
      "13/13 - 0s - loss: 0.0734 - val_loss: 0.0863 - 28ms/epoch - 2ms/step\n",
      "Epoch 72/100\n",
      "13/13 - 0s - loss: 0.0690 - val_loss: 0.0823 - 25ms/epoch - 2ms/step\n",
      "Epoch 73/100\n",
      "13/13 - 0s - loss: 0.0688 - val_loss: 0.0829 - 30ms/epoch - 2ms/step\n",
      "Epoch 74/100\n",
      "13/13 - 0s - loss: 0.0715 - val_loss: 0.0830 - 28ms/epoch - 2ms/step\n",
      "Epoch 75/100\n",
      "13/13 - 0s - loss: 0.0686 - val_loss: 0.0832 - 23ms/epoch - 2ms/step\n",
      "Epoch 76/100\n",
      "13/13 - 0s - loss: 0.0686 - val_loss: 0.0828 - 31ms/epoch - 2ms/step\n",
      "Epoch 77/100\n",
      "13/13 - 0s - loss: 0.0731 - val_loss: 0.0841 - 29ms/epoch - 2ms/step\n",
      "Epoch 78/100\n",
      "13/13 - 0s - loss: 0.0739 - val_loss: 0.0905 - 30ms/epoch - 2ms/step\n",
      "Epoch 79/100\n",
      "13/13 - 0s - loss: 0.0751 - val_loss: 0.0871 - 30ms/epoch - 2ms/step\n",
      "Epoch 80/100\n",
      "13/13 - 0s - loss: 0.0736 - val_loss: 0.0828 - 28ms/epoch - 2ms/step\n",
      "Epoch 81/100\n",
      "13/13 - 0s - loss: 0.0743 - val_loss: 0.0900 - 29ms/epoch - 2ms/step\n",
      "Epoch 82/100\n",
      "13/13 - 0s - loss: 0.0726 - val_loss: 0.0852 - 30ms/epoch - 2ms/step\n",
      "Epoch 83/100\n",
      "13/13 - 0s - loss: 0.0714 - val_loss: 0.0823 - 28ms/epoch - 2ms/step\n",
      "Epoch 84/100\n",
      "13/13 - 0s - loss: 0.0714 - val_loss: 0.0869 - 28ms/epoch - 2ms/step\n",
      "Epoch 85/100\n",
      "13/13 - 0s - loss: 0.0702 - val_loss: 0.0822 - 29ms/epoch - 2ms/step\n",
      "Epoch 86/100\n",
      "13/13 - 0s - loss: 0.0699 - val_loss: 0.0826 - 28ms/epoch - 2ms/step\n",
      "Epoch 87/100\n",
      "13/13 - 0s - loss: 0.0721 - val_loss: 0.0857 - 28ms/epoch - 2ms/step\n",
      "Epoch 88/100\n",
      "13/13 - 0s - loss: 0.0682 - val_loss: 0.0818 - 29ms/epoch - 2ms/step\n",
      "Epoch 89/100\n",
      "13/13 - 0s - loss: 0.0676 - val_loss: 0.0820 - 29ms/epoch - 2ms/step\n",
      "Epoch 90/100\n",
      "13/13 - 0s - loss: 0.0695 - val_loss: 0.0822 - 29ms/epoch - 2ms/step\n",
      "Epoch 91/100\n",
      "13/13 - 0s - loss: 0.0669 - val_loss: 0.0830 - 29ms/epoch - 2ms/step\n",
      "Epoch 92/100\n",
      "13/13 - 0s - loss: 0.0676 - val_loss: 0.0823 - 28ms/epoch - 2ms/step\n",
      "Epoch 93/100\n",
      "13/13 - 0s - loss: 0.0698 - val_loss: 0.0828 - 27ms/epoch - 2ms/step\n",
      "Epoch 94/100\n",
      "13/13 - 0s - loss: 0.0706 - val_loss: 0.0852 - 23ms/epoch - 2ms/step\n",
      "Epoch 95/100\n",
      "13/13 - 0s - loss: 0.0682 - val_loss: 0.0815 - 34ms/epoch - 3ms/step\n",
      "Epoch 96/100\n",
      "13/13 - 0s - loss: 0.0679 - val_loss: 0.0836 - 29ms/epoch - 2ms/step\n",
      "Epoch 97/100\n",
      "13/13 - 0s - loss: 0.0714 - val_loss: 0.0823 - 30ms/epoch - 2ms/step\n",
      "Epoch 98/100\n",
      "13/13 - 0s - loss: 0.0668 - val_loss: 0.0819 - 29ms/epoch - 2ms/step\n",
      "Epoch 99/100\n",
      "13/13 - 0s - loss: 0.0676 - val_loss: 0.0830 - 29ms/epoch - 2ms/step\n",
      "Epoch 100/100\n",
      "13/13 - 0s - loss: 0.0707 - val_loss: 0.0820 - 28ms/epoch - 2ms/step\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "...\n",
    "# design network\n",
    "model = Sequential()\n",
    "model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))\n",
    "model.add(Dense(1))\n",
    "model.compile(loss='mae', optimizer='adam')\n",
    "# fit network\n",
    "history = model.fit(train_X, train_y, epochs=100, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)\n",
    "# plot history\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "64a0d2b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# make predictions\n",
    "#trainPredict = model.predict(train_X)\n",
    "#testPredict = model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7c7a3607",
   "metadata": {},
   "outputs": [],
   "source": [
    "...\n",
    "# make a prediction\n",
    "yhat = model.predict(test_X)\n",
    "test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2e095d4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(91, 1) (91, 17)\n"
     ]
    }
   ],
   "source": [
    "yhat=DataFrame(yhat)\n",
    "test_X=DataFrame(test_X)\n",
    "print(yhat.shape,test_X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f5b552e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "      <th>15</th>\n",
       "      <th>16</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.558946</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.413699</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.625</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.548453</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.416438</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.750</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.614442</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.066667</td>\n",
       "      <td>0.419178</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.625</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.807692</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.537826</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.421918</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.642857</td>\n",
       "      <td>0.769231</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.347257</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.133333</td>\n",
       "      <td>0.424658</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.125</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.807692</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>0.563593</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.649315</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.923077</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>0.547252</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>0.652055</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>0.395010</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0.654795</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.125</td>\n",
       "      <td>0.821429</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>0.443394</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.933333</td>\n",
       "      <td>0.657534</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.846154</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>0.615863</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>0.660274</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>91 rows × 17 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6    7   \\\n",
       "0   0.558946  0.454545  0.000000  0.413699  0.403846  0.166667  0.333333  1.0   \n",
       "1   0.548453  0.454545  0.033333  0.416438  0.403846  0.333333  0.333333  0.0   \n",
       "2   0.614442  0.454545  0.066667  0.419178  0.403846  0.500000  0.333333  0.0   \n",
       "3   0.537826  0.454545  0.100000  0.421918  0.403846  0.666667  0.333333  0.0   \n",
       "4   0.347257  0.454545  0.133333  0.424658  0.403846  0.833333  0.333333  0.0   \n",
       "..       ...       ...       ...       ...       ...       ...       ...  ...   \n",
       "86  0.563593  0.636364  0.833333  0.649315  0.634615  0.500000  0.666667  0.0   \n",
       "87  0.547252  0.636364  0.866667  0.652055  0.634615  0.666667  0.666667  0.0   \n",
       "88  0.395010  0.636364  0.900000  0.654795  0.634615  0.833333  0.666667  0.0   \n",
       "89  0.443394  0.636364  0.933333  0.657534  0.634615  1.000000  0.666667  0.0   \n",
       "90  0.615863  0.636364  0.966667  0.660274  0.653846  0.000000  0.666667  0.0   \n",
       "\n",
       "     8    9    10   11     12        13        14     15     16  \n",
       "0   0.0  0.0  0.0  0.0  0.625  0.785714  0.884615  0.875  0.875  \n",
       "1   0.0  0.0  0.0  0.0  0.750  0.750000  0.884615  0.875  0.875  \n",
       "2   0.0  0.0  0.0  0.0  0.625  0.892857  0.807692  0.875  0.875  \n",
       "3   0.0  0.0  0.0  0.0  0.500  0.642857  0.769231  0.875  0.875  \n",
       "4   0.0  0.0  0.0  1.0  0.125  0.785714  0.807692  0.875  0.875  \n",
       "..  ...  ...  ...  ...    ...       ...       ...    ...    ...  \n",
       "86  0.0  0.0  0.0  0.0  1.000  0.892857  0.923077  0.875  0.875  \n",
       "87  0.0  0.0  0.0  0.0  1.000  0.892857  0.884615  0.875  0.875  \n",
       "88  0.0  0.0  0.0  1.0  0.125  0.821429  0.884615  0.875  0.875  \n",
       "89  0.0  0.0  0.0  1.0  1.000  0.785714  0.846154  0.875  0.875  \n",
       "90  0.0  0.0  0.0  0.0  1.000  0.857143  0.884615  0.875  0.875  \n",
       "\n",
       "[91 rows x 17 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_X[0]=yhat\n",
    "test_X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "02cb65cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "inv_yhat = scaler.inverse_transform(test_X)\n",
    "inv_yhat = inv_yhat[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "887968dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# invert scaling for actual\n",
    "test_y = test_y.reshape((len(test_y), 1))\n",
    "test_X[0]=test_y\n",
    "inv_y = scaler.inverse_transform(test_X)\n",
    "inv_y = inv_y[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "64783e5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Score: 1882.302\n"
     ]
    }
   ],
   "source": [
    "# calculate RMSE\n",
    "from math import sqrt\n",
    "#trainScore = sqrt(mean_squared_error(train_y[0], inv_yhat[0]))\n",
    "#print('Train Score: %.3f RMSE' % (trainScore))\n",
    "rmse2 = sqrt(mean_squared_error(inv_y, inv_yhat))\n",
    "print('Test Score: %.3f' % rmse2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "1c22321c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 9326.973 , 10947.946 ,  9708.997 ,  5619.949 ,  5558.2397,\n",
       "       10044.873 , 10288.602 , 10644.898 , 10581.817 , 10462.3955,\n",
       "        5803.725 ,  5572.906 ,  5300.3423, 10710.298 , 11273.48  ,\n",
       "       11244.522 , 11667.424 ,  7590.627 ,  6774.8633, 11704.308 ,\n",
       "        9871.732 , 10201.145 ,  9492.357 , 10253.624 ,  6285.7627,\n",
       "        6422.0156, 11633.283 , 10836.532 , 11490.535 , 11209.738 ,\n",
       "       11703.155 ,  6074.0303,  6141.4194, 11092.818 , 11166.793 ,\n",
       "       10922.173 , 10895.773 , 10499.909 ,  6388.93  ,  6094.518 ,\n",
       "       10711.304 , 10260.307 , 10075.045 ,  9631.047 ,  9189.405 ,\n",
       "        5590.1177,  5486.237 ,  8610.898 ,  8262.958 ,  8659.017 ,\n",
       "        8857.281 ,  9053.724 ,  6484.334 ,  6325.526 ,  9210.595 ,\n",
       "        9424.991 ,  9276.758 ,  9234.556 ,  8765.238 ,  5805.3125,\n",
       "        5893.477 ,  8685.683 ,  8984.556 ,  8625.877 ,  8150.199 ,\n",
       "        8308.105 ,  5543.205 ,  5617.0093,  8925.323 ,  7893.467 ,\n",
       "        7762.258 ,  8650.282 ,  8724.1875,  5317.1646,  4928.8423,\n",
       "        8863.677 ,  9010.058 ,  9245.504 ,  8562.461 ,  8503.573 ,\n",
       "        5820.4116,  5809.5474,  9494.697 ,  9605.762 , 10431.007 ,\n",
       "       10325.425 , 10332.748 ,  6337.3657,  6509.803 , 10606.9375,\n",
       "       10329.567 ], dtype=float32)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "227db62c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "91 91\n"
     ]
    }
   ],
   "source": [
    "print(len(inv_y),len(inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a388d8c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 9189.868 ,  9022.793 , 10073.493 ,  8853.593 ,  5819.2954,\n",
       "        5820.9985, 10097.168 , 10217.555 ,  9954.089 , 10070.383 ,\n",
       "        9351.462 ,  6446.9526,  6712.167 ,  6104.4243, 10742.806 ,\n",
       "       10958.848 , 10642.367 , 10667.892 ,  7498.849 ,  6898.058 ,\n",
       "       11509.129 ,  9678.881 ,  9706.699 ,  8892.816 ,  9126.494 ,\n",
       "        6356.6494,  6560.631 , 11613.128 , 10491.058 ,  9634.402 ,\n",
       "       10099.879 , 10583.409 ,  6231.859 ,  6303.001 , 11220.26  ,\n",
       "       10486.363 , 10114.853 , 10129.234 ,  9558.883 ,  6500.0093,\n",
       "        6268.816 , 10753.756 , 10108.658 ,  9656.491 ,  8909.847 ,\n",
       "        8074.9004,  6516.0117,  6467.161 ,  8666.945 ,  7939.774 ,\n",
       "        8266.759 ,  8208.338 ,  8079.8174,  6384.3286,  6480.02  ,\n",
       "        9241.295 ,  9189.957 ,  8420.404 ,  8224.558 ,  7626.1772,\n",
       "        5968.8657,  6059.2676,  8622.186 ,  8664.89  ,  8341.595 ,\n",
       "        7565.397 ,  7655.465 ,  6189.9766,  6828.9824,  8793.661 ,\n",
       "        7740.783 ,  7516.84  ,  8021.6206,  7809.0757,  6225.0913,\n",
       "        5999.1074,  9032.377 ,  8988.822 ,  8870.803 ,  7974.1143,\n",
       "        7705.003 ,  6032.7935,  6180.2114,  9620.937 ,  9422.626 ,\n",
       "        9873.991 ,  9263.862 ,  9003.671 ,  6579.6265,  7350.018 ,\n",
       "       10096.115 ], dtype=float32)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_yhat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3314d790",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MAPE: 0.16177115\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn import metrics\n",
    "def mape(y_true, y_pred):\n",
    "    return np.mean(np.abs((y_pred - y_true) / y_true))\n",
    "print('MAPE:',mape(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1f9a9a20",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R2-score: 0.11273574412273146\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score\n",
    "print('R2-score:',r2_score(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "27b1d1c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1b84d319970>]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAD4CAYAAAAO9oqkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8+yak3AAAACXBIWXMAAAsTAAALEwEAmpwYAABENUlEQVR4nO29ebhcVZnv/3nPOZkTMpGEQOaBIQFkCBAcwAZkUgx2ow0ORBo7raKN2thq63O128fptld+gN1cUBD0ooJoSxrHXMDxkSFEkCFEwphgQgJJIHNOkvX7493r1j51dtWe1qrh1Po8z3n2qX12rdpnV9X67u/7vmstMcYQCAQCgc6mq9knEAgEAoHmE8QgEAgEAkEMAoFAIBDEIBAIBAIEMQgEAoEA0NPsEyjKgQceaGbMmNHs0wgEAoG24sEHH3zJGDOhen/bisGMGTNYvnx5s08jEAgE2goReS5pfwgTBQKBQCCIQSAQCASCGAQCgUCAIAaBQCAQIIhBIBAIBAhiEAgEAgGCGAQCgUCAIAYBn6xZA3fe2eyzCAQCGQhiEPDHddfB294G+/Y1+0wCgUAKQQwC/ti5E/buhZdeavaZBAKBFIIYBPzR26vbDRuaex6BQCCVIAadzEsvwfz5sGqVn/atGLz4op/2A4GAM4IYdDJPPQWPPw5//KOf9oMYBAJtQxCDTsZ21q++6rf9ECYKBFqeIAadzJ49uvUtBsEZBAItTxCDTsa3M7BiE8QgEGh5ghh0Mraz3rrVT/shTBQItA1BDDqZRuUMgjMIBFqeIAadTKNyBsEZBAItTxCDTqaRzsAYP68RCAScEMSgk2mUM9izB155xX37xsD+/e7bDQQ6kCAGnUyjnAH4CRWdcQb88z+7bzcQ6EB6mn0CgSbSiGqioUNh1y4NFR16qNv2n35aJ8MLBAKlCc6gk2mEM5gyRX/3UVG0Z48KQiAQKE0Qg04mnjPwkeCNi4GPMFFvr4rMtm3u2w4EOowgBp2MdQbGwPbtftqfPBlE/DgDe/7PPOO+7UCgw0gVAxG5UUQ2iMijsX1vF5HHRGS/iCyoOv5TIrJaRFaJyFmx/WdH+1aLyCdj+2eKyH3R/ltFZLCrfy6QgnUG4CdUZHMG48f7cwags68GAoFSZHEGNwFnV+17FPhr4DfxnSIyD7gQmB895z9FpFtEuoH/AM4B5gEXRccCfAW40hgzB9gMXFrsXwnkJl7t40sMBg2CSZP8OoMgBoFAaVLFwBjzG2BT1b6VxpikFVEWAd83xuw2xjwDrAZOjH5WG2OeNsbsAb4PLBIRAU4Dbo+efzNwftF/JpCTRjiDQYNg4kS/YhCSyIFAaVznDA4B1sQer4321do/HthijNlbtT8REVkiIstFZPnGjRudnnhbsmFDucRv3Bn4KC+NOwPXYaJ9+yr/e3AGgUBp2iqBbIy53hizwBizYMKECc0+nebyxBNaqXPTTcXbaJQz8BEmip97cAaBQGlci8ELwNTY4ynRvlr7XwbGiEhP1f5AGl/9qna2t95avI1G5QwmTlTn4XKAmD33IUPg2WfVKQQCgcK4FoOlwIUiMkREZgJzgfuBB4C5UeXQYDTJvNQYY4B7gAui5y8G7nB8TgOPdevgO9+B4cPh7ruLz/uzZw+MGaO/uxYDY7SDts4A3IaKrBjMnau/r13rru1AoAPJUlr6PeAPwGEislZELhWRt4nIWuBk4Cci8gsAY8xjwG3A48DPgcuMMfuinMCHgF8AK4HbomMBPgF8TERWozmEG9z+iwOQq6+GvXvhuuu0I/zpT4u109sL48bp767FwHbWcTFwGSqy7R9+uG5D3iAQKEXq3ETGmItq/Om/ahz/BeALCft/CvTrtYwxT6PVRoEsbN0K114Lf/M38M53whVXwI9/DBfVepvqsGcPjBypoRafYjBxov7uwxnExeC009y1Hwh0GG2VQA4A3/iGhoU+/nHo6oJFi9QZ7N6dv63eXhg8GA44oH2dwcyZ0NMTksiBQEmCGLQTvb1w5ZVw6qlwwgm67/zzdW6eu+7K396ePdpZH3CA+9LSJGfgUgxsNdGwYTBjhp8w0csvu28zEGhRghi0E7ffronS+Bz+p50Go0ZpqCgvjXIGw4bpOfoIEw0aBLNnu3cGa9aooykisoFAGxLEoJ1YFQ36Pjs2O8iQIXDuuXDHHfnLK+POwKcYgPuxBvH2Z81y7ww2bNDref/9btsNBFqUIAbtRG+vxse7qt6288/Xzuvee/Xxli2wcmW29gYP1rt232LgekqKamewZQts3uyufRuGeuIJd20GAi1MEIN2wt7JV3POObr/n/5Jcwnjx8O8efD889naa5Qz8BkmArfuwLa/KmkKrkBg4BHEoJ2wd/LVjB4N550HK1ZofP6tb9X9aQnQRuUMwH+YCNyKgXUGq1b5WfgnEGgxghi0E7WcAei0FK+8Ar/5DfzDP+i+Xbuytee7mgg0TPTyyzpYLo0HH9SwTz1sZz14cEUMXCaRbftbtvhZiyEQaDGCGLQTtZwBaC5h2DD9fehQ3aaJQdwZ7NrVd/I3F+cKfZ2BMfDSS/Wft3UrnHyyDqzL2v7Ikdq+jzARhFBRoCMIYtBO1HMGcbKKQdwZgFt3kCQGkB4qWrFCn5sWtqpuf9YsP84AghgEOoIgBu1EPWcQp4gzALd5g6QwEaSHXJYv122aS6luf/ZsPzkDCBVFgY4giEE74csZjBqlj32KgXUG69fXf94DD1TOLU/7s2frQLEdO/Kfa732R48OziDQEQQxaCfa2RlMmaLbNWuSj7cUdQYnn6w5id/9Lv+5JmFf/8gjgxgEOoIgBu2E75yBTzEYPhwOPLC+GGzaVAn15BWD179ehe3//t/i5xzHvv7RR2suoshEgIFAGxHEoJ1w6Qz27YP9+/s6A58JZICpU+sPhHvwwf7Pr0W8tBRgxAh47Wth2bL855qEff2jjtLrFNZLCAxwghi0Ey6dQbyzboQzAJg2rb4Y2HzB5Mn5nQHAGWfAQw/Bxo25T7cf9vWPOkq3IVQUGOAEMWgnsjqDIUN0m0UMGpUzAHUG9cJEy5fDnDlaeVREDN70Jt3efXf+860mnjOAUFEUGPAEMWgnsjoDERWEemJgO7tBgzTEItIYZ/DKK7XXbH7gAZ1bafDgYmJw/PFa/eMib9Dbq9dkzBg4+ODgDAIDniAG7URvbzYxAA0VZXUGIu5nLq0lBpDsDtav17UaFiwoLgbd3bq+w7Jl5ecT2rOn4sIOPzyIQWDAE8SgnYh3UGmkiUHcGYD7yepqhYkgWQxsSekJJ+hzsohBV1f/6bzPOAOee658wjd+rQ87TMNEYcK6wAAmiIFLVq2CU07RJKYPfDkDaIwYWGeQlERevlw79mOP1XPKUk2UJIw2b1A2VBS/1ocdphPWuUhMBwItShADV2zerNNI//a38LWv+XkN387Ad2np5MkayklyBg88AEccoZPOZQ0TJQnjnDkqOmVLTKvDRBBCRYEBTRADF+zdC3/7t/Dsszr46fbb3a8PAO3vDLq74ZBD+jsDY9QZnHBC5ZyKioGIhoruvjv/MqBxqsNEECqKAgOaIAYuuOIKvRO99lr4n/8Tdu6EH/zA/etkLS2F1sgZdHWpAMRJGmuwZo1OYLdggT4uIwagYrBlC3zgA/D2t2vo6eMfz3/+tv1p0/R6BmcQGMAEMSjLD38IV10Fl18Ol14KCxfqneRNN7l/raylpdB8Z1DrXJPGGsSTx/acyorB8OFw443w8MO6hsLNN+c/f3tturr0PX388XxtBAKuueUW+Ku/0htOx6SKgYjcKCIbROTR2L5xIrJMRJ6MtmOj/SIiV4vIahH5k4gcF3vO4uj4J0VkcWz/8SLySPScq0VEXP+Tmdi1C445Jn+s+fe/147nq1/VxyLw3vfqhGmrV1eOW7oU3vjGcm+iT2fgo7Q0qbOeNk3FYP/+yr7779djjz66ck5lxGDCBF03YedO+POfdW3ojRvzLbtZLWYLFuh5hoqiQDN56in41a+y3xTmIIszuAk4u2rfJ4G7jDFzgbuixwDnAHOjnyXAtaDiAXwWOAk4EfisFZDomL+PPa/6tRrDmjV6F/mHP+R73p49usJYT09l33veo3eT1h088ABceCH8+tewcmXxc/TtDLZu7dtJl6GeGPT29u2Y77tPhdhOo5GlmigtfzJyZOXvdkqJRx+tfXxS+3HhXbhQl+0McxQFmsnOnfq5jvc3jkgVA2PMb4BNVbsXAdZ33wycH9v/baPcC4wRkcnAWcAyY8wmY8xmYBlwdvS3A4wx9xpjDPDtWFuNxc6zn7d8MKnC55BD4MwzNTTx7LO6QL09Ju4W8rBvn96V+swZGAPbtxc7v2pqddbVYw327dMw0YknVo7JEibKU1llp5R45JFsxye1v3ChbvPeLAQCLtm5s7K8rWOK5gwmGWPWRb+vB6KVSzgEiAeE10b76u1fm7A/ERFZIiLLRWT5Rtc13y7FADRUtHatdiI7dsAvf6n7i95ZVnfeaRRxBuCuvLSeM4BKEnnlSti2DU46qXJM2ZxBNZMmaegojzOodmFHHKGhtHvvzd5GIOCaFhSD/0d0R9+QQKox5npjzAJjzIIJEya4bdy1GCxapPPavPSSlpqeeGK5RdurO+80ijgDcJc3SHMGVgzuv1+3eZ1BHjEAdQd5nEF1mKi7W88xiEGgmezY0XJi8GIU4iHa2oVtXwCmxo6bEu2rt39Kwv7GY8XgpZfyPa9WUnfoUM3833lnZVTs7NnFw0SNcga+xWDsWJ0Yz4aJ7rtPRXPu3Moxgwdr+KjeOIG8YnDUUfDYY9lzIkkiv3Ch5pVcLa0ZCORl504tWPFAUTFYCtiKoMXAHbH9F0dVRQuBV6Jw0i+AM0VkbJQ4PhP4RfS3V0VkYVRFdHGsrcayLop6uXIGAOeeC2fH8uFz5gRnINJ3rMH992tJaXyOIfu8eknkIs5g+3bN4WQhKVm/cKEKVHwRnkAgK8boan5laGaYSES+B/wBOExE1orIpcCXgTeJyJPAGdFjgJ8CTwOrgW8AHwQwxmwCPg88EP38W7SP6JhvRs95CviZm38tJ3FnkKd8ME8ic/ZszSMUKS8t4gz27Kl9J1wtLqNG6da3GEBlrMGOHRq6iecL4ufkUgzyVhQlOT57niFUFCjCD3+o06HbvqYIHsUgtT7JGHNRjT+dnnCsAS6r0c6NwI0J+5cDR6adh3fsG9Tbq/PtjxmT7Xl5yj1nz9btM8/AvHn5zq+IMwBduzfpw9MsZwDqDB5+GFas0DvteL4AKv9jvbxBHhEGmD9ft488otVdaSS1P2GCursgBoEiLFum38eHHuobMcjDjh2V76pjwghky/r1lQ40T6gorzOAYqGiIs4AaoeKmlVNBCoGL76ok/pBMTHI6wxGjYIZM7I7g1oiv3ChlpeGwWeBvNiy5DIj2VswZzCw2LdP58axd+t5ksh5xGDOHN0WEYOkid/qkSYGSSOQoXFhIlDbPH26VlnF8SEGkK+iqFZhwMKFml9au7b/3wKBWmzdWrkRKTPwtJVLSwcEL7+sgmCnQ/DlDMaP1zvwMs4gb5goqzMYPFif06gwEWgitjpfED8n12Jw1FE62Vxa2ap97VpiACFUFMjHAw+omxwypLwzCGLgEZsvsElGX2IgUry81JcziA9rt5PV7d6ti8P88If5z9OSxRlA/xARVJ7nwxns3Ztt9tFaYaKjj9ZrG0YiB/Jgbx7OP1/FoGiYsQXHGQwsGiUGULy81IczGDRIBcpywAE69fa4cTo24oILilc+1Ousp8SGltRzBi6riSBfRVGtMNGgQTppXXAGgTzce68ukvTa1+r06nkmTYwTcgaesWMMZs1S1fUpBrNna6373r25TtGLM6hu6/WvVyH4u7+Df/kX3ffMM/nO01Kvsx42DCZO1FG9xx3X/+9Zw0R5rjvoNNQ9Pel5A2Pqv68LF2qIK0u4KRAwRp3kySdX8pJFQkXGhDCRd+zdr53DxlcCGVQMenuTl35Mex1w6wyq2/rWt3TK52uugYuiiuLnnst3nvH26wnX9Ol6p550l5O1tDSvMxg8WAUhzRlYoa7V/jHH6Os//XS+1w8MfIyB//zPvoPLnn5a+5SFCytiUCSJvHu3boMYeGT9ep3yeORIFQPfzgDyh4oa4QziTJ+uW19icM01cP31yX/zlUCGbBVFaWM6Zs3SbRCDQDWrV8Nll8GnP13ZZ0OKCxfqOuAHHFDMGdjBqkEMPLJ+PRx0kP7uWwyKlpc2whnEGTVKQ0a+xOCkkyorm1XjUwyOOkrDdPXGU6Rd6yAGgVrYDvuGGypTrtx7r95ozp+vObp584qJgZ0TK+QMPNJIMTjkEC0vy1tR1GhnAOoOfIlBPdKqiYzRUE6R9g89VLf1ciFpA/wmTtQvZBCDQDX2+9bbC1/6kv5+771aNWfXAz/iiGJhouAMGkBRMUhLNCbR1QUzZxYPEzXKGUDzxCCtmigtpl+PESN0W29+qLRrLaLuIIhBoBob1z/8cHUHq1bp9BN2fAqoM3jxxfyT1gUxaADr12ssD+DAA9WOZZmm2HZKeataipSXup6OIqszePbZYjXRLsSgljPI65Li2C9Slhld672vQQwCSdjP1f/4H7p95zu1n6gWA8jvDoIYeGbnTq37jTsDyFZRlPdu3TJ7topBnk62Wc5g+/Zi0+76FIO8+ZM4adcl3n6987diEOYoCsSxzmDOHHjf+3QyRug7nuaII3SbN28QcgaesYM/qsUgS6ioaKc0e7Z2snkGnjTDGcyYodsioaJWdQZZxCCL8M6ape+h6+VXA+2NFYMhQ+BTn9LP6KxZmmeyTJ+ud/d5xcCzM0idwnrAY8cYlBGDvJ1SvKLIvm4aeZ3BkCG6LesMQMUgaXBYLYzRuZ5aUQzsF6leziBrmAjUHcS/6IHOxn7fhg7VaVeuuqpyA2Lp6iqWRA5hIs+4EIMizgDy5Q3yCo+ICkLZnAHkdwZlOuv485rlDLKGiSDkDQJ9iTsDgA98AC65pP9xRxzRcs4giEG1GBx4oG6z5AyKioHtZG0dchZsB9iTw8zVW/oyizMYN06rb7IuFRlvG/xVE7VCmMiG0IIYBOJYMah2A9XMm6ezEORZPyTkDDyzfr3eRVurP2aMdrg+ncGQIfoaeRZWt3fy8Ynl0hg2rJwzEClWXupKDHw6g7JhomHDdAnDIAaBOPb7Zp1BLWwS+YknsrcdnIFn1q/X0JC94xZRd+BTDKB+R51EkYRsWWcAegfcaDHo7tb3wUc1UZ7S0rTzD+WlgWqqw0S1KDJhXRADz6xb1z+Jm3XgWdlOqd7dadJr5X2demKQdaK3ZjgDEf1ffTgDew3LhomgtcXgzjvhO9/JPztuoBxZncHs2Rru+d3vsrdt+4u0EFRBOk8M7FQGlvjoY0sjxGDo0Hxi0CxnMH26jjPYti3765YVA/AnBiLp1z7r+zprli5/ae8GW4krroCLL9b5cL7/fdi/v9ln1Bns3q2fy66UrrWnR9cLufXW7OHiHTtUZNLaLkhnicHevXDeeZW5+qG2GPhMIEN7OQPI5w5ciMGgQX7EANJDdHnCRMYUn7LDJzt2wPHH62fmoovg1FO13Dfgl927012B5ZJLNIH8ox9lO97jwjbQaWLQ06Md/5VXauLGmGQxCDmDClYM8lQUuXIGPqqJoP51ibefxRlAa4aKduzQydEeflgHP/3ud/mq1wLF2LUrexjnlFP0M/Stb2U73uPCNtBpYgDwxS9queSHPwybN2uHnuQMNm+uv+widK4z+MlP4Kabaj+nlcNEkC4GeZwBtKYY2LvIri444wzdV3TVukB28jiDri5473vh7ruzvTdBDBwzcSJ8/vO64Pu11+q+JDEAePnl+m11Qs7goIP0OCsGvb2wZEllet5abUPrikGaEGd9Xw86SK9xq4lB9fKIM2fqNoiBf3bvzpfgXbxY81g335x+bCuLgYhcLiKPishjIvKRaN84EVkmIk9G27HRfhGRq0VktYj8SUSOi7WzODr+SRFZXOo/ysIHPqCLnHzuc/rYzlhqyToKuROcQVcXTJtWEYP/+i/4y1+yTQHtSwzKXHdwFyYS0Y621cRgzx4VBNtxTJ2q5bpBDPyza1d2ZwD63TrjDHXaaUn+HTtaM2cgIkcCfw+cCLwGeIuIzAE+CdxljJkL3BU9BjgHmBv9LAGujdoZB3wWOClq67NWQLzR0wNf/3qlqqiWM0hLIrdrzsCYfAvKx8tLr7lGt80Ug1YJE0FrlpdW16P39KggBDFQli/XyICPGWfzhIksf/d3+v265576x7WwMzgCuM8Ys8MYsxf4NfDXwCLAep6bgfOj3xcB3zbKvcAYEZkMnAUsM8ZsMsZsBpYBZ5c4r2yccorONd7V1RxnkDdM5NIZ5F0cxq5r8NBDmog84AD/YuCzmshVaSm05lTWtlQx3nHMnBnEwLJkCbzpTVp2e911+WYCSCNPAtly/vk688GNN9Y/roXF4FHgDSIyXkSGA+cCU4FJxph10THrgUnR74cAa2LPXxvtq7W/HyKyRESWi8jyjS6mDr7uOvj1r2H06L777fxEaa9RdD0DyB8mcukM8p739OladfW//pfa1Pe8R79AtTrAVq8mSnNleeaBmjVLywPT8kuNxH6u4iGFIAYVtm7VMPGwYfD+9+sswnmXoa1FEWcwdCi8+c3wq1/VP65VxcAYsxL4CvBL4OfAQ8C+qmMM4OyWyRhzvTFmgTFmwQR7916GkSPh9a/vv3/8eN1mdQZFp1JuljPIe952UrZbboF3v1vn5LFLfiYxEMJEWeeBasWKoqRpC2bOVEHP85kbqOzaBSecoOGie+7R9/u883SRq7IUEQPQPmf79vrHtGrOAMAYc4Mx5nhjzCnAZuDPwItR+IdouyE6/AXUOVimRPtq7W8ePT06Y6fvBHIjcgZ79vRPTBVxBqAC8KEPpa8J0A5ikBYmynpt2kkMIP8MtAMRe4ctAm98ow76euopeMc7yk/fUSRMBNrJp4WrWtUZAIjIxGg7Dc0XfBdYCtiKoMXAHdHvS4GLo6qihcArUTjpF8CZIjI2ShyfGe1rLllGIZfNGezalT3WXNQZQP/pEvI6AysGp55asdfQPDEoW02UJUyUtW3bybaLGIRQUf8O+5RTNGS8bBlcfnm5tos6g+HD9XNXb2yTZzEou9LZD0VkPNALXGaM2SIiXwZuE5FLgeeAd0TH/hTNK6wGdgCXABhjNonI54EHouP+zRhTYNFdx2SZn8h2SnnWGLDEZ8/M8gYXdQZJr5HXGUydqlMaXHaZPs4qBkU7a/vcZoeJsjBihOaYWml0b60EMgQxgOS790su0ZXH/v3ftdTzbW8r1nbecQaWESN0u2NH/xympZXFwBjzhoR9LwOnJ+w3wGU12rkRSEmlN5hx49Ittb1bz7PGgKWIGBR1BtUdX15n0N0N3/1u5XEjnIHvaqI0MchzradNay0xSEog2wFynS4Gvb06R1PSd+5LX9JlKu+7r7gY5B1nYLHv1fbtyWKwb58KTavmDAY0w4enx/SLhG4sWdbirX6tMs4gTtk7d3vutWKcZRLrlizOoIgjg0rOoF41VF4xaKXJ6pLCRCJaCNAOYrBjB6xa5aft+BrF1XR3wyGH6Ey0RSkaJoo7gyTsebdqzmBAk6Xap4wYZFlxK07ZMFGcsp21vTvxnTOoV1ra01PMkYG+t3bgXRJ5hXf6dHUGrTLWoNYiKO1SXnrttXDssX6mBk9bE2DKlHJiUCaBDLUrijwvbANBDGqTFkqAxjsDV2EiV86gmdVEZdpOWwe5SJho2zY3pYkuaHcxsCWwL77ovu20O+wpU3Rt4qL4cgZBDJpIo8Qga3lpKzmDVhCDMsnpNFeWt/0iaz74pJ4YbNnSOqJVC7tI/Pr17tuuFyaCijMo4vL27tUy7rI5gySsSIScQRNotTBRcAYViuRP4qQJcd72p03TbaskkZOqiaB9Kop8ikHaHfbUqfr+Z1ncqpo0oalHcAYtzNChqvT1BqE0Kkxk49ud5AzSqol8homKJJAhnzO49VZYuNBPnmHnTj3/7u6++12LwZ49Oir9DW+AT3/aTZvQfGcAxfIGNsfhwxkEMWgitQZsxWmUGFhBajVnUOsuprdXJwAss1br4MFquZOWanQlBrWufd73deJE7QDyOIPly7WEcd269GPzUqse3ZUY7N+vi0RNn67Tk9x/v84CXEu889IKYlAkb2D7iuAMBhhZOutG5QyK3mk3s5qoTGcNleuaVPHTiARynvZF8o81sHeATz2V/TlZqSUGY8dqDXtZMXjiCXUCc+fCz34Gt90Gr76qkz66oNlhIijmDOznKeQMBhhpHQY0LmdQdPqFZuYMXIlB0t1m2fbThLhIgjq+5kMWtm3TbSPFANxUFNlz/8Qn4OyzdTroYcNg6dJy7Vqa6QwmTtSy5UaHiYIzaGGydNZlEpl5wkSt5gy6u/W57SoGrktLobWcwY4dfsWg+i51+HAVhDvucJMDaaYYdHXpwLMiYaIyCeShQ9VhBjFoQbKEcRqVM2g1ZwD1q618i0GZ6w7ZcgZ5z3/aNI3/Zx0o5dsZ1AonzJyp06yU6bSTQhaLFmkH+vDDxdu1NDNMBMUHnpVxBiJ6PUMCuQXJEiYqU+/ezjkD8C8G9vntFCaC7J1IM3IGoGJQdkBXkhi8+c3aod1xR/JzsrJ/f0Uo161zX22V5e596tTGiwHUn8Y6ab4pxwQxqIXvBLJdPMWnM7DH+3IG9aqJOjFMBNnzBs3MGUC5UFFSxzRpEpx8cvm8gf1MTZqk78+rr5Zrr5q06Sig+MCzMmEi0LxBWgI5OIMm4DuBLJJ9tbOizkAkeSR1OziDRlQTuQwTWWeQNW9gv/QvvwyvvJLvtdLwLQa1Klve+lZYsaLc3D42RDR3rm5dh4qyTPg2ZYoel3cpU9/OQKTcDVwKQQxq4VsMILsYuFhEJ44LZzB8ePsmkH2EiWx9elYx2LZNp0kH9wvj1Esgz5ql5aW33VaufegvBosW6baMO2iEGIjU//wULS8tM84A6juD+OpsnghiUAvfYSL7Gj5zBtD+zqBdwkRDhuiaAVnDRNu3w2teo7+7DhXVSyAPHQof+5jG9h98sFj7tcTgsMO0E29lMcjSqRYdhVxmnAGkOwOP+QIIYlCbRjiDtLV4468Dbp1BV1f/6Qry0OwEcpnrnpavKVoybKeyTsMYdQZHH62PfYhBvTDI5ZfrALTPfa5Y+zt2aC1+9TUS0VDR3XdXciJ5aYQzSLtzLzoK2UWYqF7OwGO+AIIY1CbrOINGhIl8OIOyscdml5aWab9WLgV0+gtjil2frIvc2LWvJ0/W5VUbLQajR8MVV8Cdd+pUEnnZsaP2XerJJ+v7/+ST+duFihhMn67vcTPEYNKkYgPPXCSQ6zmDIAZNwvc4A/sazXIGZTvrdg4TQe0QXZlrnXWRG3vXPGKExvCrxWDNmuKdqTHZOo4PfxjGjy/mDtIGtUHxBLUVgwMO0E7ZV5ioHt3dcPDBxXMGPpxBEIMmkhYmMsZNmKhZOQMXzqARpaU+qomg9rUvk0+ZNk07hI0b6x9nxWDkSJg9u78Y/M3fwOGHw4c+BJs25TuHrMsjjhoFH/+4zi30hz/ke416zmDGDN2mrR9eCysGo0ZpDqYZzgCKDTwrKwZpziDkDJqEfUNr3f2WCSdYmhUmctGZtnM1EdTO15SptMo61sDe/Y0YoWKwZk3l/1y7Fh54QPMJ114Lhx4K3/hG9pr3PIOTLrtMw1Rf/GK2ti31xGDsWL2rL+sMWkEM8uYM7PesaJ8QcgYtSr24MpQLJ1iaFSZq95xBI8JERRPIkJ5ErnYG+/dX7qT/+791+73vwR//CPPnw5Il8L//d7ZzyDNtwciR8Nd/Db//fb4BVvXuUkXKzX9kxWDECD9ikDXcYkch57kudsnLouWfI0bo+e3f3/9vIUzUZBohBs0IE7nMGSR9WVp9OgpIDxM10hlAJVT03/8Nc+ZomebRR8M998A558BHPqKOIY28c9jMnw+bN+frdOs5A9BQUZkw0ciRWu120EGwYUPymhZFyeMMdu7Ua5OV3buLJ4+h/tTwQQyaTL3STxdi0KzSUlfOwOZNqmn1ierAT5ho7Fjt4PM6A9CBZ9u2wV13aXmmvbvs6oL/83+08uiCC9JHxeYVg3nzdPv449mOh3QxsM6gyLxCVgxA/+f9+4stQVmLnTuziwHkCxXt2lU8XwD1p7EOOYMmU+/O3ffArTit6gygdofa6mEiHwlkkWxjDeLO4KCD9Ev+1FOwbJm+/nnn9T1+3Di4/Xa9e3/3u5PDCJYizgDci8GOHemJ9CS2btV8Aei1Aberwe3ale3aFBl4ZsNERbHXNEkMWj1nICIfFZHHRORREfmeiAwVkZkicp+IrBaRW0VkcHTskOjx6ujvM2LtfCrav0pEzir5P7kj5AxqU2/pS5/VRPv3608rlpZCtrEGcWcgUikvXbpU3cXrXtf/OQsWwNVXw89/DjfcULvtvBOaTZqkr/nYY9mOt6+RJgZQLFSUJAYu8wZZw0RFpqTI2nYtrDNISiK3cphIRA4B/hFYYIw5EugGLgS+AlxpjJkDbAYujZ5yKbA52n9ldBwiMi963nzgbOA/RaTE0FiH1OusXeYM0ux0KzqDevFNn86gzLWI4yNMBJU4dz3sl92GQ2bP1nEFd94J555b+39bskQrdep13HmnOhZRd+DSGdjy0iJJ5G3b/IpB1jDRQQfpeIM8YSKfzqCVxSCiBxgmIj3AcGAdcBpwe/T3m4Hzo98XRY+J/n66iEi0//vGmN3GmGeA1cCJJc/LDfWcgYvJ3oYO1bvcpFr6OK3sDNpZDFyHiQDGjIEtW+ofEx90BuoMVq7U2Hh1iCiOiI4erjfLaZFFUObNU4HJGuPP6gyKiEHcGUyapNtaYnDffTptRZ7lRrOGibq7NWeRN0zkwxns3as/rSoGxpgXgK8Cz6Mi8ArwILDFGLM3OmwtcEj0+yHAmui5e6Pjx8f3JzynufhOIGdd7aysM9izp2+cuR1yBt3d2vn5EgNfYaKxY7Wz37u39jHbt+sdZE+PPrZJ5J4eXVO4Hr7EYNOmdEcDKhhp8euRI+HAA8uHiUaM0N9ricHPfgarV8NXv5q9/TyhnLyL3JRNINdyBg1Y2AbKhYnGonf1M4GDgRFomMcbIrJERJaLyPKNRZJTecmSQG6EGOzZox1jkYnl7Ac/vhxjOzgD0HOsFgMX1x1qO4Oyjm/MGN3W67C3bavcBUJFDE49VTv7evgQgzxJ5N5eLfVM65hmzCjvDKD+WIMVK3R7ww3ZktXGZHcGoI7tkUfqC3ucsmGiWs6gAQvbQLkw0RnAM8aYjcaYXuBHwOuAMVHYCGAK8EL0+wvAVIDo76OBl+P7E57TB2PM9caYBcaYBRMmTChx6hlpRAIZ0sca2M61yGCWpGk12sEZQLIY+M4ZuAgTQf369O3bK/kCgCOO0O3b3pbefpoYFOk4bHlpliRy1rvUogPP8ojBgw/CiSfqOX396+lt511v4IIL1C0tW5bteFfjDGo5gxYWg+eBhSIyPIr9nw48DtwDXBAdsxiwi6IujR4T/f1uY4yJ9l8YVRvNBOYCBaZS9EAjxhlANmdQ9HWSxMBnNZExeufoSgyq8ymuw0TVcfKy76sVg3p5g2pnMH06LF8O739/evtZnUGekMLkyXreWZxBrbUMqpk5U2P59cpgq9m3T9vPIgbr18Nf/gIXXgjnnw/XXJM+bXbeWUXPPVfLer/97WzHuxpnUO0MWl0MjDH3oYngFcAjUVvXA58APiYiq9GcgK2DuwEYH+3/GPDJqJ3HgNtQIfk5cJkxxuGQwxK0SpiozJ22L2dQq5rIVWcN/p0B1G6/TM4A6otBtTMAOP74bGHArGKQ5w5VRN2BSzGYMUOvbZ4xArYzj4vB5MnJYvDHP+r2uOPgE59QJ/bNb9ZvP2+nOngwXHQR/PjH2ZYm9VVN1Oo5AwBjzGeNMYcbY440xrwnqgh62hhzojFmjjHm7caY3dGxu6LHc6K/Px1r5wvGmNnGmMOMMT8r+085o1FhonZ2Bu0uBtXn7ypMlMcZ5CGLGAwZoiOX82AritLI4wwgX6jIzksUF8qDDtL/t/p9svmCY46BhQvhlFPga19LHqRoKbLewOLF+rwf/CD92LLjDOw1bcOcwcCnUWGirDkDV6/hM2fgUgwGDfIvBrWWBC0bJsqTM8jD6NF6jrU+M0Xr0efP19LWtERsI8SgOkwE8OKLfY998EEtK7UJ9098QscE3Hpr7faLuKYFC3Q68SyhorLOoKdHP3dtmDMY+NQbFBacgW7b1RnUSt43IkxU1hlAbXdQdNqCrHMUZRUDO4NrnvLSemJQHSpasUJDRJZzztEBefUm88u61kMcEbj4Yvjtb3X+qHqUTSBD8jTWQQxagKFDVQiSBoV1es6gWWLgsrQU3IeJRozQ2H/enEFW0sSg6IRmtrw0LVSUVQyGDtV4vytnEBeDl1/W5HRcDEQ02VvvuhddlvLd79b2v/Od+seVTSBD8gI37ZAzGPDUq/ZptDNwKQYunEF3t56TbzHwVU3kK0wkoqGiemEin86gaJjo4IP1ztqVM4D85aVJYjBtmuY/7r23ss8mj48/vu/z00Z/FwkTgQ4+O+00DRXVGqVtTPkwESQ7g5AzaAHqjQNodM7AZZjI1TiA4cP738V0epgINFRUq1MyRsXApzMo0mlkrSjK0zHNnFk+TDR+vI6/uP76Sif54IO6PfbYvs9PE4MiYSLLu96lYaJHHkn+u/3clA0T1XMGQQyaSBZnUHYK61rtV7+WK2ewf7/Wc5d1BpA8kV+7iEGaMyjTfr1Oac8evf6t5gxAQ0WuwkSg5aVr1lRG8D70UP0BXEmlpQAf/ag6LZvEXbFC2x43ru9xWcWgSIc9d65uqxPZ1W27cAZBDFoQ384gT87AlTNw2Vn7FoNGVBMl5Qx6eoovXQj1O6X49NVF8JVABnUGGzbUX0wmT/x65kwVvjVr4Cc/gde+Ft73vtrHJzkD0OedcAJceaXezKxY0T9EBNnDREWuT9p1t6ObXeQMQgK5BakXxnFxB5l1BLLLBLKrBCwMTGdQRngt9XIG1dNX58VXAhkqd7/1qmbyhokAvvhFWLRIr3W9ldq2btX8QPX5i6g7ePJJXRt69eq+yWOLT2eQdt3LtB0nyRns2KE3KC6+U3UIYlCPtDBR0fmCLCJ6J5GWM3BZWtooZ+BCbHxWE9VyfWVCcpZ6OYPq6avzYu+afYSJbFls2txHgwZlu0Z2XYNvfhP+6q/g4x9XMaw1MMwueZn0nbrgAl197KMf1ce1xGDr1toTy/kUA9/OwLMrgCAG9akXJnJxB2lfIziDZBpRTZQUJnLhDGqJQVln0N2tguBDDGyHV+/uOm0tgzhTp8KECTqlw09+Ulk9rJZriq9/XM2gQfDhD1cGxdUSA4BXX01uo0y4ZdQoFak0MfDhDIIYtABpYaJGiUGZ17LP8+EMkj64LsJnlnYOE+3alfy5KesMoP6UFC7EIM0ZZBWDQYN0PYDvflevqU341hOD6nxBnL//e33tKVNg4sT+f0+bCqRMkrerS0tv08JEvpyB5zEGoCuVBWqRFiZyJQY+p6MQ0Q+STc65dgbVI0PbJWfgO0wE2inZQVOWss4A/IlBlrUY8ogB9P2c2etSVAzGjtUkcq2VAdPEYOdOjb33FOz2Ro+u3barMFGtnEEDnEEQg3qkVRO56FDrzX/k6rVmzdKkG4RqIovvMBEki4FPZ7B/v35Wi95F2ni9qzBRNVYMNm1K/nuaGICuA12LLM6gTKdaT4RdhYlGjNCcR/xzGMJELUCrhInKDhKLDyZqt5yBLzHo6VHr7ytMBMmdkk9nUGZQFaSHQqCcGJQNE6WRRQzKdNb1xMDlOAPo6w6CGLQAjQoT+XYG8+ZpueCOHe3lDOqJQdlrL5I8RbmLMFG9mUt9OgMX9ehjxqSLQdlqpWaJwc6d/sTAZTUR9M0bNChnEMSgHo0KE/nMGYCKgTGwalX7OYPq+LDLBHVSvsbF+1pv5lKfzsCFGGRZL6Fox2Q76zJhoiztt3OYKDiDFmWgOIP4guc+qonik3e5FgM7fUa8fZFsq4KlkZSv8R0m2ratMm99UXyLga+cwaBB2tn7cga2/NNXmKiea3JZTQR9ncH27UEMmk6tuDK0V85gzhz9Xx5/3L0zgMpdEbgXA+gbKnI1yR74DxPVcgZlXAFoh717d9/rDm5mt8wSJioTshg7NlkMenv1/ykjBl1d9cWs7B22bTtp5lJfzsAYLc89+OBy7WYgiEE9RGqXfjZKDIzR6oIyrzV4sE418Nhj7nMG0Pf8XVcTgT8x8BUmGjpUf2rlDMrkC0CTvNC/03Yx731amMiXGNSal6hI+z4TyHv3Jn9ffTmDF1/U17NTe3gkiEEatUo/G5UzcNW52ooiH87Alxg0whkkhYlctF9rFLIrZwC1xaBVw0SgFUVJOYOyE/hZ6o3+diEGkCyWLscZQMUZ2PUgghi0APWcga+KnOrXgfKvNX8+PPVU5Q6sHZxBs8JELoSyVqfkwhn4FoNXX00OhRjT+s6gnhi4CBNBfTFwMc4AKmJg14MIYtAC1Lpzb1SYyFUp5bx5mox99FE37UHjxCBeUeTquoO/MBHUnrm0zMI2Fp9iMGaMJuyrp0QAvTb797evGPh0Brt2ac6i6Ohmi7229vpbZ2An/fNIEIM0fIeJhg3TOGStmRZdOQO74PlDD7lpD5LL4NrNGfgKE9WKXW/f7s8ZuEgg15usLs/CNrWoFSZqlDMoW00EtZ1B2RARJIeJJk4s/5nJQBCDNHwnkNOWvnTlDA49VMsxrRj4dAZdXfpTloEaJvLtDMomkJPaBjdiMHasdpzVItwoZ+BLKHfvLh8igv4J5GeeaUiICIIYpNMIZwC1Q0WunMGQIVpiapft85kzcNVZ+64maoYYtHoCud7drwvnUWsUsksxqLWmge8wkQtnMGSIVjHGnUGri4GIHCYiD8V+XhWRj4jIOBFZJiJPRtux0fEiIleLyGoR+ZOIHBdra3F0/JMistjFP+aMWjkDl+sZQG0xcLlYjA0VuWrPtxj4dgZJrs9lmGjz5v6J2EaUlvpKkrpwHrUmq3MpBpC8poGL6SigdpjIhTMQqUxjvW8fPP9864uBMWaVMeYYY8wxwPHADuC/gE8Cdxlj5gJ3RY8BzgHmRj9LgGsBRGQc8FngJOBE4LNWQFqCRowzAP/OAPqKQTs4g2bkDFw6g6RErAtn0NOjHUZ1h2f/Fxcdns+cAfh1BtD//G1eroxQjhyp4U+fzgAqI/vXrtVzbnUxqOJ04CljzHPAIuDmaP/NwPnR74uAbxvlXmCMiEwGzgKWGWM2GWM2A8uAsx2dV3kaMc4A/OcMoH2dQbyayJUjA/9hIujbKfX2avsukoFJg8PsnW+ZpVizhIlcOIMkMejuLn93XWuSQBelnyK1B+W5SiBDxRk0cIwBuBODC4HvRb9PMsasi35fD0yKfj8EWBN7ztpoX639rUEjSkuhMc7AzlEE5UvgoDnOwNX4DtDz3727EsrZt09LJ10NOoO+nZKLSeosSZ1S2TEAtl3wLwZJYSI7t1AZajkDF64Jag/KcxUmgoozaDcxEJHBwFuBH1T/zRhjgITRK4Vfa4mILBeR5RvtWqi+SQoT2U6j3XIGhx6qNnfQoPJfOqhdWtpOYSLovySoi2udNHOpi+mrLbWcQdkJzYYN0xuFZoSJXIhkLTEou9aDpd5aEj6cQVcXTJvmpt0UXDiDc4AVxpioTIUXo/AP0XZDtP8FYGrseVOifbX298MYc70xZoExZsGECRMcnHoGasWVwW2YKE0MXMX4Z81ye2cN7V1NBJWOwuX7mtQp+XYGLsRApPZkdS7EYPRofY0kMSibL4B0MXDhDHyHieLOYMoUd5/3FFyIwUVUQkQASwFbEbQYuCO2/+Koqmgh8EoUTvoFcKaIjI0Sx2dG+1qDWnFlcOsMauUMXL4WaN7AVVtdXdpWOyeQob8zcBkmajdnUKttcCMGdmbRRouBi0orqC8GrsJEcWfQoBARlFwDWURGAG8C/iG2+8vAbSJyKfAc8I5o/0+Bc4HVaOXRJQDGmE0i8nnggei4fzPG1Fj9ogkMG1YZhm8HUvme7C2Oyw4K4F3vgsmT3bQF/afTaCcxqL72Lt/XpERpOziDWm2DGzGA5FHIrsTAVvz4dAZ2Spfq9l07g/Xr4cwz3bSZgVJiYIzZDoyv2vcyWl1UfawBLqvRzo3AjWXOxRvxu0f7JWikGLh2Bu94h/64ohFiUF1N1A5hoqQSTd/OwEUC2bZdL2dQVnCS5ifatg0OOqhcu1B7TQNXCeRaITTXzmDTJtiwoaHOIIxATiOp9NNHziCttLRBccPcNNoZuJyozmeYqKdH71J95gx27uwrlK6cQa0Ob+dOvfZlV5lLEoNNmyohnrIkjf52nUCuHkzo2hlsiFKtQQxaiKQ7d9fr8Fa3H8e1M3CNtbSWdgwT+XAG0L9Tcu0MoG+n3YgwkQvnUR0m2rYN/vIXXYDJBfXEwEWYKGkwoetxBpYgBi2Eb2fQ6JyBa3w6g0ZVE/nIGUD/O2DXzgD8iUGtMJELMai+Ln/+s24PO6x825AsBi7HGUB/sXQ9zsASxKCFSKr2cdlpdHdr52Y/rMbozKLWhrp0IT5o5wSyzzARtK8zsJO97dvXd79rMbCf8See0O3hh5dvG/yHiaC/GLgeZwD6+XdZ7JFCEIM0ksYBuL6DjJevLl0Kxx4Lv/udPnY5EMoHPsWgu1sTggMpTNTV5eYOMqlT2rHDnTOAynxB8fZdhYn27q2I4xNP6HWZM6d82+A/TAR9r/v+/fq5dJkzAJg+3c1U8BkJYpCG7zAR9O1Qb7hBt3bdgU52BqDX2Hc1USPDRCNHuhn9XcsZuKomgv4dqktnAJVrs2qVhkNcdaY+w0RJczfZz43LaiJoaIgIghik4ztMZF9j505da+CnP9V9jz+u2052BqD/t73exrRPNREkOwNXK1ZVi8G+fXptXIWJ4m1bfInBE0+4CxGBnv+2bX3XNHAdJoq/r7Zt184giEGLkRQmct1B2ykvvvtd/VIffHBFDFrdGfisJoK+YmBj2O0wzgC0U3r1VQ0jgJvpqy3VYuCqs0tq2+IyTARaUbR/vyaQXYsB9HdNUL7DTro2LmZEjRPEoEVpZJjoW9+CE06AN7+5rzPo6ipf2+0L385g0KDK9XZ95+5zBDJop2RMZd0Bl86geoEbV9MtgH8xiDuD55/X75YPMai+ey87vTckXxvXziCEiVqURoWJli+HRx6B975X5w966SXYuNHtlM0+iIvBrl36JXHRIVnizsC1GPgOE1WHQ1w6g0GDtGO2nZKr0cFQf34f12JgK4lclZVCfTEoy/DhemOW5AxcicEJJ8D73gdvepOb9jISxCCNRlQTDRum85AMHgwXXghHHKH7V650u5iLD6wYGKPJ761b4YIL3LXvUwx6evSL7TNMBCry4NYZgLqDamfgMoGc5AxciE2SGPh2BmWXvLQkLXDjOkw0ciR84xuV69QgHKxwMsBpRJjIvsaiRRpPtSuSPf54ezgDUBH4ylfgda+DN77RXfvxaiIfA/BGjFAXBu7f1wUL9P1ctAje8hZdxnDq1PTnZSXeKbVTmGjUKBXhTZtUEMaNgwMPLN+upZYzcOVYq6frcB0mahLBGaRRbzoKl84AYHE08/eUKXp38Pjj7eEMAK6/Htasgc98xk3ppCXJGbi8HmedBbfdpiEc12IzZQo8/TR8/vPw+9/rlAsuZua0WDHo7YUvfrHymmUZPFhvUOKdqTHuxECkUnb7xBMaInL5mfEZJoL+I7Rdh4maRBCDNOwb7NMZHHSQfonPOksfi6g7WLmy9Z2B7Ry+/GW9E7b/gyviYuCjsuof/1G/2Lfc4mceqNGjVSCffRb+4z/gox912/aGDfD2t8MPfgD//u8ab3ZB9d2vXR7UhRhAXzFwGSICv2Ei8B8mahJBDNKw00X4FIMvfUkTyPF1iY84or2cwcsvu3cF4LeaCDSsdeyxcPXVfst4DzgAPvhBOPpod22OHq2DE++4A665Bq64wm3b1aObwZ0YjBunArl+vXsxSFrTwGWYqPrahDBRB1FdPulaDEaNgkmT+u6bN0/DChs3trYzsF+wo4+G885z377PBDKoeH34w/DYY/DLX1Zesx2YMEHP/5vfhA99yG3b1aEQ12IwdiysWKG/u6wkguQ1DVyHiYIz6FCql75sxEAwm0T+059au3MaH61t9OlP+5lHxbcYAFx0kSYwly3z074vPvMZzUVceqn7tqvDRD7EwL6frp0B9B/97TJMFBLIHcywYf3FoKfHfUgkjhWDF19s7c7p1FPhD3/QuLUPfFcTgXYSS5bo7608wK+agw+Gk0/203YjwkSg36NZs9y0GWfsWL9hovjI8pBA7iDsdBEWl/Pj1GL69MqdTCs7g64uWLjQnzBaZ/Dss/Cxj+m+gw92/zof+ICKQCtf60biWwxsDf3s2X5udnw6g9GjVQjsrKshTNRBJIWJfHca3d0V+9zKzsA3gwbplAWveY0uRH7LLXDMMe5fZ8oUHSxna+w7naTOFNyLgY8QEfQ/f9fOAPrPCxWcQQeQFCZqxB2kDRV18t3qkCF6B3bkkVo58853+nut666Du+/21347Ub3GssvpLqASJvIpBvHpw10nkKEiBsEZdBDNCBNBZVqKTnYG738/XHUV/PrX/ifuGj26IsCdTnWH5ytM5LqSyDJ/PrzwAjz8sD52HSaC/mIQnEEH0IwwEVQ6pk4Wg5NO0oFhPWHmlIZSPW+/azE48kgdbPn617tpr5r3vlfP9aqrdLCc6+kooCIGK1dq2w1clcwH7X32jSJpmuYQJgoMZKo7PNdiMHs2rFsHc+e6aa+aceN0epdbblGHYIx7Z7BlC/zsZ/D97+sNS5sTxCALzXIGttKik51BoDn4DhM1gssv1+/qlVfqY9di8NxzOtX0/Pnwr//qpu0mErx3FpolBoMG6YCoE0/0/1qBQJxaYSKXa1X45rDD4NxztTAA3FcTfeEL2i8sXdr2+QIo6QxEZIyI3C4iT4jIShE5WUTGicgyEXky2o6NjhURuVpEVovIn0TkuFg7i6PjnxSRxWX/KeckTUfRqNDNzTfDZZc15rUCAUs8TNTbC/feq66g3eLiH/mIzkgL7pzB0KF6o7Z9O/zLv8Dxx7tpt8mUfWevAn5ujDkceA2wEvgkcJcxZi5wV/QY4BxgbvSzBLgWQETGAZ8FTgJOBD5rBaRlaJYzCASahb37/ctf4K1vhZ//vD1DIWecoWEccCcGIjBxos7H9ZnPuGmzBSgsBiIyGjgFuAHAGLPHGLMFWATcHB12M3B+9Psi4NtGuRcYIyKTgbOAZcaYTcaYzcAy4Oyi5+WFIAaBTsOusfy5z+kEft/4httZURuFiLoDcLvK3I9/rAI5gPqBMjmDmcBG4Fsi8hrgQeByYJIxZl10zHrATsd5CLAm9vy10b5a+/shIktQV8G0adNKnHpOhg2Dffsqi70HMQgMdLq7VRB279a1Es4/v9lnVJyLL9bv7BlnuGtzwQJ3bbUIZcJEPcBxwLXGmGOB7VRCQgAYYwxgSrxGH4wx1xtjFhhjFkyYMMFVs+lUL30ZxCDQCXz96/CrX7W3EIB+Vz/4wfaqhGoCZcRgLbDWGHNf9Ph2VBxejMI/RNsN0d9fAOILwE6J9tXa3zrYKoS4GIRyz8BA5z3v0UkIAx1BYTEwxqwH1oiIHU9+OvA4sBSwFUGLgTui35cCF0dVRQuBV6Jw0i+AM0VkbJQ4PjPa1zpYZ2ArioIzCAQCA4yy4ww+DNwiIoOBp4FLUIG5TUQuBZ4D3hEd+1PgXGA1sCM6FmPMJhH5PPBAdNy/GWM2lTwvt4QwUSAQGOCUEgNjzENAUibl9IRjDZBYMG+MuRG4scy5eMWGic44QxNr69YFMQgEAgOKMAI5C294g85zYlc4O/10P0sNBgKBQJMIYpCFCRPgppuafRaBQCDgjTYbWx4IBAIBHwQxCAQCgUAQg0AgEAgEMQgEAoEAQQwCgUAgQBCDQCAQCBDEIBAIBAIEMQgEAoEAIDpLRPshIhvRuY+KcCDwksPTaXfC9agQrkVfwvWoMFCuxXRjTL81ANpWDMogIsuNMQNvdYqChOtRIVyLvoTrUWGgX4sQJgoEAoFAEINAIBAIdK4YXN/sE2gxwvWoEK5FX8L1qDCgr0VH5gwCgUAg0JdOdQaBQCAQiBHEIBAIBAKdJQYicraIrBKR1SLyyWafT6MRkakico+IPC4ij4nI5dH+cSKyTESejLZjm32ujUJEukXkjyJyZ/R4pojcF31Gbo3W9+4IRGSMiNwuIk+IyEoRObnDPxsfjb4nj4rI90Rk6ED+fHSMGIhIN/AfwDnAPOAiEZnX3LNqOHuBfzLGzAMWApdF1+CTwF3GmLnAXdHjTuFyYGXs8VeAK40xc4DNQCetb3oV8HNjzOHAa9Dr0pGfDRE5BPhHYIEx5kigG7iQAfz56BgxAE4EVhtjnjbG7AG+Dyxq8jk1FGPMOmPMiuj3reiX/RD0OtwcHXYzcH5TTrDBiMgU4M3AN6PHApwG3B4d0knXYjRwCnADgDFmjzFmCx362YjoAYaJSA8wHFjHAP58dJIYHAKsiT1eG+3rSERkBnAscB8wyRizLvrTemBSs86rwfx/wD8D+6PH44Etxpi90eNO+ozMBDYC34rCZt8UkRF06GfDGPMC8FXgeVQEXgEeZAB/PjpJDAIRIjIS+CHwEWPMq/G/Ga01HvD1xiLyFmCDMebBZp9Li9ADHAdca4w5FthOVUioUz4bAFFuZBEqkgcDI4Czm3pSnukkMXgBmBp7PCXa11GIyCBUCG4xxvwo2v2iiEyO/j4Z2NCs82sgrwPeKiLPoiHD09CY+ZgoLACd9RlZC6w1xtwXPb4dFYdO/GwAnAE8Y4zZaIzpBX6EfmYG7Oejk8TgAWBuVA0wGE0GLW3yOTWUKCZ+A7DSGPO12J+WAouj3xcDdzT63BqNMeZTxpgpxpgZ6GfhbmPMu4B7gAuiwzriWgAYY9YDa0TksGjX6cDjdOBnI+J5YKGIDI++N/Z6DNjPR0eNQBaRc9E4cTdwozHmC809o8YiIq8Hfgs8QiVO/i9o3uA2YBo6Lfg7jDGbmnKSTUBE3ghcYYx5i4jMQp3COOCPwLuNMbubeHoNQ0SOQZPpg4GngUvQG8aO/GyIyL8Cf4tW4f0ReB+aIxiQn4+OEoNAIBAIJNNJYaJAIBAI1CCIQSAQCASCGAQCgUAgiEEgEAgECGIQCAQCAYIYBAKBQIAgBoFAIBAA/n+SSr4iAkVj+wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(inv_yhat,'r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "334e9396",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "inv_yhat=pd.DataFrame(data=inv_yhat)\n",
    "inv_yhat.to_csv('inv_y.csv')\n",
    "inv_yhat.to_csv('pu03_max_pre.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "776d1290",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
